package com.qdlc.p2p.common.util;

import java.util.HashMap;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import javax.servlet.http.HttpServletRequest;

import org.apache.struts2.ServletActionContext;

import com.octo.captcha.service.CaptchaServiceException;
import com.qdlc.p2p.common.util.jcaptcha.CaptchaServiceSingleton;

/**
 * 数据校验工具类
 * 
 * @author xx
 * @version 2.0
 * @since 2014年1月8日
 */
public class ValidateUtil {
	private static Map<String, Object> map;
	
	/**
	 * 校验_验证码
	 * 
	 * @param validCode 验证码
	 * @return 校验结果 true：通过 false：不通过
	 */
	public static boolean checkValidCode(String validCode) {
		
		boolean b = false;
		HttpServletRequest request = ServletActionContext.getRequest();
		try {
			b = CaptchaServiceSingleton.getInstance().validateResponseForID(request.getSession().getId(),
					validCode.toLowerCase());
		} catch (CaptchaServiceException e) {
			b = false;
			e.printStackTrace();
		}
		return b;
	}

	/**
	 * 校验用户名 规则：数字与字母组合，字母，汉字，4-16位(?![a-zA-Z]+$)
	 * 
	 * @param userName 用户名
	 * @return 校验结果 true：通过 false：不通过
	 */
	public static boolean isUserName(String userName) {
	    if (userName.length() < 4 || userName.length() >16) {
	        throw new IllegalArgumentException("用户名长度必须是4-16位！");
	    }
		Pattern p = Pattern.compile("^(?![0-9]+$)[0-9A-Za-z\u0391-\uFFE5]{4,16}$");
		Matcher m = p.matcher(userName);
		return m.matches();
	}
	
	/**
	 * 密码格式校验
	 * @param pwd
	 * @return
	 */
	public static String isPwd(String pwd) {
		String result = "";
	    if (pwd.length() < 8 || pwd.length() >16) {
	    	result = "密码长度必须是8-16位！";
	    	return result;
	    }
	    
	    boolean b1 = Pattern.compile("[0-9]").matcher(pwd).find();
		boolean b2 = Pattern.compile("(?i)[a-zA-Z]").matcher(pwd).find();
		
		if(b1 && b2){
			result = "";
		}else{
			result = "密码必须是数字+字母组成";
		}
		return result;
	}
	

	/**
	 * 校验是否中文
	 * 
	 * @param str 字符串
	 * @return 校验结果 true：通过 false：不通过
	 */
	public static boolean isChinese(String str) {
		Pattern regex = Pattern.compile("[\\u4e00-\\u9fa5]{2,25}");
		Matcher matcher = regex.matcher(StringUtil.isNull(str));
		return matcher.matches();
	}

	/**
	 * 校验Email格式
	 * 
	 * @param email 输入邮箱
	 * @return 校验结果 true：通过 false：不通过
	 */
	public static boolean isEmail(String email) {
		Pattern regex = Pattern.compile("\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*");
		Matcher matcher = regex.matcher(StringUtil.isNull(email));
		return matcher.matches();
	}

	/**
	 * 校验手机号格式
	 * 
	 * @param phone 手机号
	 * @return 校验结果 true：通过 false：不通过
	 */
	public static boolean isPhone(String phone) {
		Pattern regex = Pattern.compile("^((13[0-9])|(15[^4,\\D])|(18[0-9])|145|147|170|173|176|177|178|185)\\d{8}$");
		Matcher matcher = regex.matcher(StringUtil.isNull(phone));
		boolean isMatched = matcher.matches();
		return isMatched;
	}
	
	/**
	 * 校验手机号
	 * 
	 * @param phone 手机号
	 * @return 校验结果和消息
	 */
	public static Map<String, Object> checkPhone(String phone) {
		map = new HashMap<String, Object>();
		map.put("result", false);
		if (StringUtil.isBlank(phone)) {
			map.put("message", "请输入手机号！");
			return map;
		}
		if (!isPhone(phone)) {
			map.put("message", "请输入正确的11位手机号！");
		} else {
			map.put("result", true);
		}
		return map;
	}
	
	
	/**
	 * 判断是否是金额
	 * @param str
	 * @return
	 */
	public static boolean isAmount(Object obj) {
		if(obj==null){
			return false;
		}
		Pattern pattern = Pattern.compile("^((\\d{1,9})|([0]{1}))(\\.(\\d){0,2})?$");    
	    return pattern.matcher(obj.toString()).matches();
	}
	
	/**
	 * 判断是否是整数
	 * @param obj
	 * @return
	 */
	public static boolean isInteger(Object obj) {
		if(obj == null){
			return false;
		}
		Pattern pattern = Pattern.compile("^[-\\+]?[\\d]*$");    
	    return pattern.matcher(obj.toString()).matches();  
	}
	
}
